home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / etc / RCS / getpass.c,v < prev    next >
Text File  |  1992-03-27  |  2KB  |  152 lines

  1. head     1.5;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.5
  10. date     92.03.27.12.25.11;  author shirriff;  state Exp;
  11. branches ;
  12. next     1.4;
  13.  
  14. 1.4
  15. date     89.06.15.12.59.12;  author ouster;  state Exp;
  16. branches ;
  17. next     1.3;
  18.  
  19. 1.3
  20. date     88.07.28.17.47.31;  author ouster;  state Exp;
  21. branches ;
  22. next     1.2;
  23.  
  24. 1.2
  25. date     88.07.25.10.45.46;  author ouster;  state Exp;
  26. branches ;
  27. next     1.1;
  28.  
  29. 1.1
  30. date     88.06.26.15.15.02;  author ouster;  state Exp;
  31. branches ;
  32. next     ;
  33.  
  34.  
  35. desc
  36. @@
  37.  
  38.  
  39. 1.5
  40. log
  41. @Modified to allow long passwords.
  42. @
  43. text
  44. @#if defined(LIBC_SCCS) && !defined(lint)
  45. static char sccsid[] = "@@(#)getpass.c    5.2 (Berkeley) 3/9/86";
  46. #endif LIBC_SCCS and not lint
  47. /* Taken from 4.3 BSD;  cannot be redistributed except to people with
  48.  * proper AT&T source licenses. */
  49.  
  50. #include <stdio.h>
  51. #include <signal.h>
  52. #include <sgtty.h>
  53. #include <pwd.h>
  54.  
  55. char *
  56. getpass(prompt)
  57. char *prompt;
  58. {
  59.     struct sgttyb ttyb;
  60.     int flags;
  61.     register char *p;
  62.     register c;
  63.     FILE *fi;
  64.     static char pbuf[_PASSWORD_LEN + 1];
  65.     void (*sig)();
  66.     extern char *getenv();
  67.  
  68.     p = getenv("TTY");
  69.     if ((p != NULL) && ((fi = fopen(p, "r")) != NULL))
  70.         setbuf(fi, (char *)NULL);
  71.     else
  72.         fi = stdin;
  73.     sig = signal(SIGINT, SIG_IGN);
  74.     ioctl(fileno(fi), TIOCGETP, (char *) &ttyb);
  75.     flags = ttyb.sg_flags;
  76.     ttyb.sg_flags &= ~ECHO;
  77.     ioctl(fileno(fi), TIOCSETP, (char *) &ttyb);
  78.     fprintf(stderr, "%s", prompt); fflush(stderr);
  79.     for (p=pbuf; (c = getc(fi))!='\n' && c!=EOF;) {
  80.         if (p < &pbuf[_PASSWORD_LEN])
  81.             *p++ = c;
  82.     }
  83.     *p = '\0';
  84.     fprintf(stderr, "\n"); fflush(stderr);
  85.     ttyb.sg_flags = flags;
  86.     ioctl(fileno(fi), TIOCSETP, (char *) &ttyb);
  87.     signal(SIGINT, sig);
  88.     if (fi != stdin)
  89.         fclose(fi);
  90.     return(pbuf);
  91. }
  92. @
  93.  
  94.  
  95. 1.4
  96. log
  97. @Changed to conform to new signal handler type.
  98. @
  99. text
  100. @d10 1
  101. d21 1
  102. a21 1
  103.     static char pbuf[9];
  104. d37 1
  105. a37 1
  106.         if (p < &pbuf[8])
  107. @
  108.  
  109.  
  110. 1.3
  111. log
  112. @Lint.
  113. @
  114. text
  115. @d21 1
  116. a21 2
  117.     int (*signal())();
  118.     int (*sig)();
  119. @
  120.  
  121.  
  122. 1.2
  123. log
  124. @Lint.
  125. @
  126. text
  127. @d31 1
  128. a31 1
  129.     ioctl(fileno(fi), TIOCGETP, &ttyb);
  130. d34 1
  131. a34 1
  132.     ioctl(fileno(fi), TIOCSETP, &ttyb);
  133. d43 1
  134. a43 1
  135.     ioctl(fileno(fi), TIOCSETP, &ttyb);
  136. @
  137.  
  138.  
  139. 1.1
  140. log
  141. @Initial revision
  142. @
  143. text
  144. @d23 1
  145. d25 4
  146. a28 1
  147.     if ((fi = fdopen(open("/dev/tty", 2), "r")) == NULL)
  148. a29 2
  149.     else
  150.         setbuf(fi, (char *)NULL);
  151. @
  152.